table of contents
CONSOLE_IOCTL(4) | Руководство программиста Linux | CONSOLE_IOCTL(4) |
ИМЯ¶
console_ioctl - управление вводом-выводом (ioctl) консольного терминала и виртуальных консолей
ОПИСАНИЕ¶
Поддерживаются Linux-ориентированные запросы ioctl(2), перечисленные далее. Для каждого запроса требуется третий аргумент, который далее именуется argp.
- KDGETLED
- Получить
состояние
индикаторов.
argp
указывает
ячейку
типа char. В
младших
трёх битах
*argp
хранится
состояние
индикаторов:
LED_CAP 0x04 индикатор caps lock
LEC_NUM 0x02 индикатор num lock
LED_SCR 0x01 индикатор scroll lock - KDSETLED
- Установить состояние индикаторов. Состояние индикаторов устанавливается в соответствии с тремя младшими битами argp. Однако, если установлен старший бит, индикаторы возвращаются в исходное состояние: отображают состояние функций клавиатуры caps lock, num lock и scroll lock.
До появления ядра 1.1.54 индикаторы состояния отражали только состояние флагов клавиатуры, которые также могли быть изменены KDGETLED/KDSETLED. После появления 1.1.54 они могли отображать уже произвольную информацию, но по умолчанию показывали флаги клавиатуры. Последующие две команды ioctl используются для доступа к флагам клавиатуры.
- KDGKBLED
- Получить флаги клавиатуры: CapsLock, NumLock, ScrollLock (не индикаторы). argp указывает на ячейку типа char, в которой сохраняется состояния флагов. Младшие три бита (маска 0x7) содержат текущее состояние флагов, следующие три бита (маска 0x70) содержат устанавливаемое состояние флагам по умолчанию. (Начиная с ядра 1.1.54).
- KDSKBLED
- Установить флаги клавиатуры: CapsLock, NumLock, ScrollLock (не индикаторы). argp содержит требуемые состояния флагов. Три младших бита (маска 0x7) содержат состояния флагов, следующие три бита (маска 0x70) содержат состояния флагов по умолчанию. (Начиная с 1.1.54).
- KDGKBTYPE
- Получить тип клавиатуры. Возвращается значение KB_101 равное 0x02.
- KDADDIO
- Добавить порт ввода/вывода (I/O) как допустимый. Эквивалентно вызову ioperm(arg,1,1).
- KDDELIO
- Удалить порт ввода/вывода (I/O) как недопустимый. Эквивалентно вызову ioperm(arg,1,0).
- KDENABIO
- Включить ввод/вывод на видеокарту. Эквивалентно вызову ioperm(0x3b4, 0x3df-0x3b4+1, 1).
- KDDISABIO
- Выключить ввод/вывод на видеокарту. Эквивалентно вызову ioperm(0x3b4, 0x3df-0x3b4+1, 0).
- KDSETMODE
- Установить
текстовый/графический
режим. argp
содержит
одно из
двух
значений:
KD_TEXT 0x00
KD_GRAPHICS 0x01 - KDGETMODE
- Получить тип режима (текстовый/графический). argp указывает на ячейку типа long, которой присваивается одно из вышеперечисленных устанавливаемых значений.
- KDMKTONE
- Генерировать тон заданной длительности. Младшие 16 битов argp задают частоту тона (период в тактах), старшие 16 битов устанавливают его длительность в мсек. Если длительность равна нулю, звук выключается. Управление возвращается немедленно. Например, argp = (125<<16) + 0x637 определяет звук, обычно связанный с ctrl-G. (Работает начиная с 0.99pl1; не работает в 2.1.49-50).
- KIOCSOUND
- Запустить и остановить генерацию звука. Младшие 16 битов argp определяют период в тактах (то есть argp = 1193180/частота). Значение argp = 0 выключает звук. В обоих случаях управление возвращается немедленно.
- GIO_CMAP
- Получить из ядра текущую цветовую карту по умолчанию. argp указывает на массив из 48 байтов. (Начиная с 1.3.3.)
- PIO_CMAP
- Изменить цветовую карту по умолчанию для текстового режима. argp указывает на массив из 48 байтов, который содержит, по порядку, значения красного, зеленого и синего для 16-и доступных экранных цветов: 0 — составляющая выключена, 255 — полная интенсивность. Цвета по умолчанию, по порядку: чёрный, тёмно-красный, тёмно-зелёный, коричневый, тёмно-синий, тёмно-сиреневый, тёмно-голубой, светло-сервый, тёмно-серый, ярко-красный, ярко-зелёный, жёлтый, ярко-синий, ярко-сиреневый, ярко-голубой и белый. (Начиная с 1.3.3).
- GIO_FONT
- Получить экранный шрифт (256 символов) в расширенном виде. argp указывает на массив из 8192 байтов. Возвращает код ошибки EINVAL, если текущий загруженный шрифт содержит 512 символов или консоль находится не в текстовом режиме.
- GIO_FONTX
- Получить экранный шрифт и связанную с ним информацию. argp указывает на struct consolefontdesc (см. PIO_FONTX). При вызове значение поля charcount должно быть равно максимальному числу символов, которое помещается в буфер, указываемый chardata. При возврате charcount и charheight содержат информацию о текущем загруженном шрифте, а массив chardata содержит данные шрифта, если согласно начальному значению charcount для этого достаточно места; в противном случае буфер остаётся неизменным и errno присваивается значение ENOMEM. (Начиная с 1.3.1).
- PIO_FONT
- Установить экранный шрифт из 256 символов. Шрифт загружается в знакогенератор EGA/VGA. argp указывает на карту размером 8192 байта (32 байта на символ). Только первые N из них используются для шрифта 8xN (0 < N <= 32). Этот вызов также отменяет перекодировку в Юникод.
- PIO_FONTX
- Установить
экранный
шрифт и
соответствующую
информацию
для
изображения.
argp
указывает
на
структуру:
struct consolefontdesc {
unsigned short charcount; /* число символов в шрифте
(256 или 512) */
unsigned short charheight; /* число линий сканирования на
символ (1-32) */
char *chardata; /* данные шрифта в
расширенном формате */ };
Если требуется, соответственно изменяются размеры экрана и соответствующим процессам посылается сигнал SIGWINCH. Этот вызов также отменяет перекодировку в Юникод. (Начиная с 1.3.1).
- PIO_FONTRESET
- Сбросить экранный шрифт, размер и перекодировку в Юникод в начальные значения, использованные при загрузке. Аргумент argp не используется, но его значение должно быть NULL, чтобы эта версия была совместима с будущими версиями Linux. (Начиная с 1.3.28).
- GIO_SCRNMAP
- Получить разметку экрана из ядра. argp указывает на область размером E_TABSZ, которая заполняется позициями символов шрифта, используемыми при отображении. Вызов возвращает бесполезную информацию, если текущий загруженный шрифт содержит более 256 символов.
- GIO_UNISCRNMAP
- Получить полную экранную перекодировку в Юникод из ядра. argp указывает на область размером E_TABSZ*sizeof(unsigned short), которая заполняется представлением в Юникоде каждого символа. Специальный набор Юникода, начинающийся с U+F000, используется для перекодировки "напрямую в шрифт". (Начиная с 1.3.1).
- PIO_SCRNMAP
- Загрузить "определяемую пользователем" (четвёртую) таблицу в ядро, по которой перекодируются байты в символы экрана консоли. argp указывает на область размером E_TABSZ.
- PIO_UNISCRNMAP
- Загрузить "определяемую пользователем" (четвёртую) таблицу в ядро, перекодирующую байты в значения Юникода, которые затем транслируются в экранные символы согласно текущей загруженной карте соответствия символов Юникода и шрифта. Специальные коды Юникода, начинающиеся с U+F000, могут использоваться для непосредственного перевода байтов в символы шрифта. (Начиная с 1.3.1).
- GIO_UNIMAP
- Получить
соответствие
символов
Юникода
шрифту из
ядра. argp
указывает
на
структуру
struct unimapdesc {
unsigned short entry_ct;
struct unipair *entries; };
где entries указывает на массив структур
struct unipair {
unsigned short unicode;
unsigned short fontpos; };
(Начиная с 1.1.92.)
- PIO_UNIMAP
- Поместить соответствие символов Юникода и экранного шрифта в ядро. argp указывает на struct unimapdesc. (Начиная с 1.1.92).
- PIO_UNIMAPCLR
- Очистить
таблицу,
возможно с
помощью
алгоритма
хэширования.
argp
указывает
на
структуру
struct unimapinit {
unsigned short advised_hashsize; /* 0, если не использовать */
unsigned short advised_hashstep; /* 0, если не использовать */
unsigned short advised_hashlevel; /* 0, если не использовать */ };
(Начиная с 1.1.92.)
- KDGKBMODE
- Получить
текущий
режим
клавиатуры.
argp
указывает
на ячейку
типа long, в
которой
может быть
одно из
значений:
K_RAW 0x00
K_XLATE 0x01
K_MEDIUMRAW 0x02
K_UNICODE 0x03 - KDSKBMODE
- Установить текущий режим клавиатуры. argp указывает на ячейку типа long, значением которой может быть любое из представленных чуть ранее.
- KDGKBMETA
- Получить
режим
обработки
метаклавиш.
argp
указывает
на ячейку
типа long, в
которой
может быть
одно из
значений:
K_METABIT 0x03 установлен старший бит
K_ESCPREFIX 0x04 экранирующий префикс - KDSKBMETA
- Установить режим обработки метаклавиш. argp указывает на ячейку типа long, значением которой может быть любое из представленных чуть ранее.
- KDGKBENT
- Получить
один
элемент из
таблицы
трансляции
клавиш (код
клавиши
для кода
действия).
argp
указывает
на
структуру
struct kbentry {
unsigned char kb_table;
unsigned char kb_index;
unsigned short kb_value; };
значения двух первых полей представляют собой: kb_table — выбранную таблицу клавиш (0 <= kb_table < MAX_NR_KEYMAPS) и kb_index — код клавиши (0 <= kb_index < NR_KEYS). kb_value присваивается соответствующий код действия или K_HOLE, если нет такой клавиши, или K_NOSUCHMAP, если значение kb_table неверно.
- KDSKBENT
- Создать элемент в таблице трансляции клавиш. argp указывает на struct kbentry.
- KDGKBSENT
- Получить
значение
строки
функциональной
клавиши. argp
указывает
на
структуру
struct kbsentry {
unsigned char kb_func;
unsigned char kb_string[512]; };
kb_string равна (заканчивающейся null) строке, соответствующей коду действия функциональной клавиши kb_func.
- KDSKBSENT
- Создать элемент строки функциональной клавиши. argp указывает на struct kbsentry.
- KDGKBDIACR
- Получить
таблицу
акцентов
из ядра. argp
указывает
на
структуру
struct kbdiacrs {
unsigned int kb_cnt;
struct kbdiacr kbdiacr[256]; };
где kb_cnt — число элементов массива, каждый из которых является структурой
struct kbdiacr {
unsigned char diacr;
unsigned char base;
unsigned char result; };
- KDGETKEYCODE
- Получить
элемент
таблицы
кодов
клавиш
ядра
(сканкод в
код
клавиши). argp
указывает
на
структуру
struct kbkeycode {
unsigned int scancode;
unsigned int keycode; };
keycode устанавливается в соответствии с заданным scancode. (Допускается 89 <= scancode <= 255. Для 1 <= scancode <= 88, keycode==scancode.) (Начиная с 1.1.63.)
- KDSETKEYCODE
- Записать элемент таблицы кодов клавиш ядра. argp указывает на struct kbkeycode. (Начиная с 1.1.63).
- KDSIGACCEPT
- Вызывающий процесс показывает свою готовность к приему сигнала argp, если он генерируется нажатием соответствующей комбинации клавиш. (1 <= argp <= NSIG). (См. функцию spawn_console() в linux/drivers/char/keyboard.c).
- VT_OPENQRY
- Получить первую доступную (не открытую) консоль. argp указывает ячейку типа int, устанавливаемое значение которой равно номеру vt (1 <= *argp <= MAX_NR_CONSOLES).
- VT_GETMODE
- Считывает
режим
активного
vt. argp
указывает
на
структуру
struct vt_mode {
char mode; /* режим vt */
char waitv; /* при установленном; остановка при записи, если терминал неактивен */
short relsig; /* послать сигнал при освобождении req */
short acqsig; /* послать сигнал при захвате */
short frsig; /* не используется (устанавливается в 0) */ };
которая задаёт режим активного vt. mode имеет одно из значений:
VT_AUTO автоматическое переключение vt
VT_PROCESS обрабатывать управление переключением
VT_ACKACQ подтверждающий переключатель - VT_SETMODE
- Установить режим активного vt. argp указывает на struct vt_mode.
- VT_GETSTATE
- Получить
общую
информацию
о
состоянии
vt. argp
указывает
на
структуру
struct vt_stat {
unsigned short v_active; /* активный vt */
unsigned short v_signal; /* посылаемый сигнал */
unsigned short v_state; /* битовая маска vt */ };
Для каждого используемого vt устанавливается соответствующий бит в поле v_state. (В версиях с 1.0 до 1.1.92).
- VT_RELDISP
- Освободить дисплей.
- VT_ACTIVATE
- Переключиться на виртуальный терминал argp (1 <= argp <= MAX_NR_CONSOLES).
- VT_WAITACTIVE
- Подождать, пока виртуальный терминал argp не станет активным.
- VT_DISALLOCATE
- Освободить память, выделенную виртуальному терминалу argp. (Начиная с 1.1.54.)
- VT_RESIZE
- Установить
представление
о размере
экрана в
ядре. argp
указывает
на
структуру
struct vt_sizes {
unsigned short v_rows; /* количество строк */
unsigned short v_cols; /* количество столбцов */
unsigned short v_scrollsize; /* не используется */ };
Заметим, что этот вызов не изменяет видеорежим. Смотрите resizecons(8). (Начиная с 1.1.54.)
- VT_RESIZEX
- Установить
значение
различных
параметров
экрана в
ядре. argp
указывает
на
структуру
struct vt_consize {
unsigned short v_rows; /* количество строк */
unsigned short v_cols; /* количество столбцов */
unsigned short v_vlin; /* количество строк на экране
в пикселях */
unsigned short v_clin; /* количество строк в символе
в пикселях */
unsigned short v_vcol; /* количество столбцов на экране
в пикселях */
unsigned short v_ccol; /* количество столбцов в символе
в пикселях */ };
Любому параметру может быть присвоено нулевое значение, указывающее "оставить без изменений", но, если задано несколько параметров, то они должны быть согласованы. Этот вызов не изменяет видеорежим. Смотрите resizecons(8). (Начиная с 1.3.3).
Действие следующих ioctl зависит от первого байта структуры, указываемой argp, далее называемой subcode. Доступны только суперпользователю или владельцу текущего tty.
- TIOCLINUX, subcode=0
- Сделать дамп экрана. Удалено в 1.1.92. (С ядром 1.1.92 и более поздним используйте чтение из /dev/vcsN или /dev/vcsaN).
- TIOCLINUX, subcode=1
- Получить информацию о задании. Удалено в 1.1.92.
- TIOCLINUX, subcode=2
- Произвести
выделение.
argp
указывает
на
структуру
struct {
char subcode;
short xs, ys, xe, ye;
short sel_mode; };
xs и ys — начальные столбец и строка. xe и ye — конечные столбец и строка. (У левого верхнего угла строка=столбец=1.) Значение sel_mode равно 0 для выделения "символ за символом", 1 для выделения "слово за словом" или 2 для выделения "строки за строкой". Выделенные символы подсвечиваются и сохраняются в статическом массиве sel_buffer из devices/char/console.c. - TIOCLINUX, subcode=3
- Вставить выделение. Символы буфера выделения записываются в fd.
- TIOCLINUX, subcode=4
- Включить погашенный ранее (blank) экран.
- TIOCLINUX, subcode=5
- Установить содержимое 256-битной таблицы поиска определения символов в "word" для выделения "слово за словом". (Начиная с 1.1.32).
- TIOCLINUX, subcode=6
- argp указывает ячейку типа char, которая устанавливает значение переменной ядра shift_state. (Начиная 1.1.32.)
- TIOCLINUX, subcode=7
- argp указывает ячейку типа char, которая устанавливает значение переменной ядра report_mouse. (Начиная с 1.1.33.)
- TIOCLINUX, subcode=8
- Сделать дамп значений ширины и высоты экрана, позиции курсора и всех пар символ-атрибут. (Только в версиях с 1.1.67 по 1.1.91. С ядром 1.1.92 и более поздних версий используйте чтение из /dev/vcsa*).
- TIOCLINUX, subcode=9
- Восстановить ширину и высоту экрана, позицию курсора и все пары символ-атрибут. (Только в версиях с 1.1.67 по 1.1.91. С ядром 1.1.92 и более поздних версий используйте запись в /dev/vcsa*).
- TIOCLINUX, subcode=10
- Обработчик
функций
энергосбережения
для нового
поколения
мониторов.
Режим
гашения (blanking)
экрана VESA
устанавливается
равным argp[1],
который
определяет
тип
гашения:
0: гашение экрана выключено.
1: текущие установки регистров видеоадаптера сохраняются, когда контроллер программируется на отключение вертикальной синхронизации. Происходит перевод монитора в режим "ожидания" (standby). Если в мониторе есть таймер Off_Mode, то он может в итоге сам выключить питание.
2: текущие настройки сохраняются, а затем вертикальная и горизонтальная синхронизации отключаются. Происходит перевод в режим "выключен" (off). Если в мониторе нет таймера Off_Mode или вы хотите отключить питание сразу же по истечении времени blank_timer, то можете выбрать это значение. (Внимание: частое выключение питания может повредить монитор.)(Начиная с 1.1.76.)
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
Переменная errno может принимать следующие значения:
ЗАМЕЧАНИЯ¶
Предупреждение: не рассматривайте эту справочную страницу как документацию о ioctl консоли Linux. Она предназначена только для любознательных, как альтернатива исходному коду. Ioctl — это внутренние недокументированные возможности Linux, которые могут изменяться без предупреждения. (И на самом деле, эта страница более или менее полно описывает параметры ядра версии 1.1.94; они несколько отличаются от параметров ядра более ранних версий.)
Очень часто ioctl вводятся для обмена между ядром и какой-то определённой известной программой (fdisk, hdparm, setserial, tunelp, loadkeys, selection, setfont и т.д.), и их поведение изменяется по требованию этой программы.
Программы, использующие такие ioctl, не могут быть перенесены в другие версии UNIX, не будут работать в старых версиях Linux и могут не работать в будущих версия Linux.
Используйте функции POSIX.
СМОТРИТЕ ТАКЖЕ¶
dumpkeys(1), kbd_mode(1), loadkeys(1), mknod(1), setleds(1), setmetamode(1), execve(2), fcntl(2), ioperm(2), termios(3), console(4), console_codes(4), mt(4), sd(4), tty(4), tty_ioctl(4), ttyS(4), vcs(4), vcsa(4), charsets(7), mapscrn(8), resizecons(8), setfont(8), /usr/include/linux/kd.h, /usr/include/linux/vt.h
2009-02-28 | Linux |